import { getToken } from './auth'

// 路由白名单，不需要登录即可访问
const whiteList = [
  '/',
  '/views/index',
  '/views/login',
  '/views/register',
  '/views/sms-login'
]

/**
 * 检查页面是否在白名单中
 * @param {string} path 页面路径
 * @returns {boolean}
 */
function isWhiteListed(path) {
  // 确保路径以'/'开头，以便与白名单匹配
  const formattedPath = path.startsWith('/') ? path : '/' + path
  // 兼容pages.json中的首页路径，可能为 '/' 或 '/views/index'
  if (formattedPath === '/views/index' && whiteList.includes('/')) return true
  return whiteList.includes(formattedPath)
}

/**
 * uni-app的路由守卫
 * @description 在每次页面跳转前进行拦截
 */
export function setupPermission() {
  uni.addInterceptor('navigateTo', {
    invoke(args) {
      if (!isWhiteListed(args.url)) {
        const token = getToken()
        if (!token) {
          console.log('路由拦截：未登录，跳转到登录页')
          uni.showToast({
            title: '请先登录',
            icon: 'none'
          })
          // 跳转到登录页
          uni.navigateTo({
            url: '/views/login'
          })
          return false // 拦截本次跳转
        }
      }
      return true // 放行
    },
    fail(err) {
      console.error('navigateTo拦截器错误:', err)
    }
  })

  uni.addInterceptor('switchTab', {
    invoke(args) {
      if (!isWhiteListed(args.url)) {
        const token = getToken()
        if (!token) {
          console.log('路由拦截：未登录，跳转到登录页')
          uni.showToast({
            title: '请先登录',
            icon: 'none'
          })
          // 跳转到登录页
          uni.navigateTo({
            url: '/views/login'
          })
          return false // 拦截本次跳转
        }
      }
      return true // 放行
    },
    fail(err) {
      console.error('switchTab拦截器错误:', err)
    }
  })

  uni.addInterceptor('reLaunch', {
    invoke(args) {
      if (!isWhiteListed(args.url)) {
        const token = getToken()
        if (!token) {
          console.log('路由拦截：未登录，跳转到登录页')
          uni.showToast({
            title: '请先登录',
            icon: 'none'
          })
          // 跳转到登录页
          uni.navigateTo({
            url: '/views/login'
          })
          return false // 拦截本次跳转
        }
      }
      return true // 放行
    },
    fail(err) {
      console.error('reLaunch拦截器错误:', err)
    }
  })
}

// 导出模块
export default {
  setupPermission
} 